package com.itheima.health.job;

import com.itheima.health.common.RedisConst;
import com.itheima.health.service.SetMealService;
import com.itheima.health.util.QiniuUtils;
import lombok.extern.slf4j.Slf4j;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Set;

/**
 * @author ：石破天
 * @date ：Created in 2022年06月07日
 * @description ：
 * @version: 1.0
 */
@Component //  定义任务实现类
@Slf4j
public class ClearImageJob {
    // 清理前最小等待时间
    private static final Long MIN_DELETE_WAIT_TIME = 10*60 * 1000L;//最长等待录入时间设置为十分钟
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private QiniuUtils qiniuUtils;

    @Autowired
    private SetMealService setMealService;

    @Scheduled(cron = "0 48 15 * * ?")//设置时间为 凌晨两点进行垃圾清理
    public void executeInternal() throws JobExecutionException {
        log.info("[清理垃圾图片]开始……");
        //清理垃圾图片
        //                查询来redis中的 暂存图片信息
        Set<String> set = redisTemplate.opsForSet().members(RedisConst.SETMEAL_PIC_RESOURCES);
        for (String img : set) {
            try {
                System.out.println("截取图片:"+img);
                Long createTime = Long.valueOf(img.split("_", 2)[0]);
                System.out.println(createTime);
                // 判断:等待时间是否大于清理前的最小等待时间；防止用户表单未提交，图片就被删除了
                if (System.currentTimeMillis() - createTime < MIN_DELETE_WAIT_TIME) {
                    log.info("[清理垃圾图片]等待时间小于清理前的最小等待时间，暂不清除:{}", img);
                    continue;
                }

                // 垃圾图片 从七牛云删除
                log.info("[清理垃圾图片]{}", img);
                //从七牛云移
                qiniuUtils.deleteFileFromQiniu(img);
                // 无论是否垃圾图片，都从redis移除
                redisTemplate.opsForSet().remove(RedisConst.SETMEAL_PIC_RESOURCES,img);
            } catch (RuntimeException e) {
                log.error("[清理垃圾图片]失败:" + img, e);
                continue;
            }
        }
        log.info("[清理垃圾图片]完成……");

    }
}

